/**
 * 将对象所有属性均设为undefined
 * @param obj 目标对象
 */
export const clearFields = obj=> Object.keys(obj).forEach(key=> {
  if(Array.isArray(obj[key])) {
    obj[key] = [];
  } else if(obj[key] instanceof Set) {
    obj[key] = new Set();
  } else {
    switch(typeof obj[key]) {
      case "string":
        obj[key] = "";
        break;
      default:
        obj[key] = "";
    }
  }
});

/**
 * 根据对象数组某个属性分组，并给出各组的合并数量，追加在每组第一个元素
 * @param target       目标数组
 * @param mergeProp    分组的属性
 * @param rowSpanProp  合并数量的属性名称
 * @return Array       返回带有合并信息的数组
 */
export const appendMergeProp = (target, mergeProp, rowSpanProp)=>{
  if(!Array.isArray(target) || target.length === 0) return;
  //拷贝一个数组
  let newArray = [...target];
  //各组起始行索引
  let firstIndex = 0;
  //临时存储，用于判断属性是否发生变化
  let temp = newArray[0][mergeProp];
  //合并的总数
  let rowSpanCount = 0;
  //开始遍历
  newArray.forEach((item, index)=>{
    //处理合并
    if(temp !== item[mergeProp]) {
      //添加跨行参数
      newArray[firstIndex][rowSpanProp] = rowSpanCount;
      //还原
      firstIndex = index;
      rowSpanCount = 0;
      temp = item[mergeProp];
    }
    rowSpanCount++;
  });
  //处理最后一行
  if(firstIndex <= newArray.length-1) {
    newArray[firstIndex][rowSpanProp] = rowSpanCount;
  }
  //返回
  return newArray;
};

/** 当对象为null或undefined时，返回value */
export const nvl = (targetObject, value) => {
  if(!targetObject) return value;
  else return targetObject;
};

/** 比较两个对象是否相等，如果同为null或defined也相等 */
export const equals = (obj1, obj2) => {
  return nvl(obj1, "NULL") === nvl(obj2, "NULL");
};



// WEBPACK FOOTER //
// ./src/assets/js/utils/ObjectUtils.js